package com.example.aircraft.aircraft;



import com.example.aircraft.ImageManager;
import com.example.aircraft.MyApplication;
import com.example.aircraft.bullet.AbstractBullet;
import com.example.aircraft.bullet.Cluster;
import com.example.aircraft.bullet.Straight;

import java.util.List;

/**
 * 英雄飞机，游戏玩家操控
 * @author hitsz
 */
public class HeroAircraft extends AbstractAircraft {

    /**攻击方式 */

    /**
     * 子弹一次发射数量
     */
    private int shootNum = 1;
    /**
     * 护罩值
     */
    private int  shield  = 0;
    /**
     * 子弹伤害
     */
    private int power = 30;

    /**
     * 子弹射击方向 (向上发射：1，向下发射：-1)
     */
    private int direction = -1;


    /**
     * @param locationX 英雄机位置x坐标
     * @param locationY 英雄机位置y坐标
     * @param speedX 英雄机射出的子弹的基准速度（英雄机无特定速度）
     * @param speedY 英雄机射出的子弹的基准速度（英雄机无特定速度）
     * @param hp    初始生命值
     * @param launchBarrage 发射弹幕的策略
     */
    private static HeroAircraft instance = null;


    private HeroAircraft(int locationX, int locationY, int speedX, int speedY, int hp) {
            super(locationX, locationY, speedX, speedY, hp);
    }
    public static HeroAircraft newInstance(){
        if(null==instance){
            instance = new HeroAircraft( MyApplication.getContext().getResources().getDisplayMetrics().widthPixels/ 2,
                    MyApplication.getContext().getResources().getDisplayMetrics().heightPixels - ImageManager.HERO_IMAGE.getHeight() ,
                    0, 0, 100);
        }
        return instance;
    }

    @Override
    public void forward() {
        // 英雄机由鼠标控制，不通过forward函数移动
    }

//    @Override
    /**
     * 通过射击产生子弹
     * @return 射击出的子弹List
     */
    public List<AbstractBullet> shoot() {

        return launchBarrage.Launch(this.locationX,this.locationY,30,"Hero");
    }


    @Override
    public void decreaseHp(int decrease){
        //回血或是没有盾时扣血
        if(shield<=0||decrease<=0){
            hp -= decrease;

        }else{

            shield -=decrease;

            if(shield<=0){
                hp+=shield;
                shield = 0;
            }
        }
        if(hp <= 0){
            hp=0;
            vanish();}
    }

    /**
     * 护盾可叠加
     */
    public void setShield(){
        shield += 100;
    }
    public int getSheld(){
        return shield;
    }

    /**
     * 类中类
     * 实现策略模式
     *
     */
    public void clusterDeploy(){
        launchBarrage = new Cluster();
    }
    public void straightDeploy(){
        launchBarrage = new Straight();
    }
    public static void Init(){
        instance = null;
    }

}




